#!/usr/bin/env python
#coding:utf-8
import sys
import re
import json
#from constants import *
import cn2an
#VIDEO_ENTITIES_PATH = 'VIDEO_ENTITIES.json'
#VIDEO_ENTITIES = json.load(open(VIDEO_ENTITIES_PATH))

class SportsDetect():
    def __init__(self, football_team_file="data/football_team.txt"):
        self.matched_during_pattern = [
            re.compile('[\s\S]*赛[\s\S]*先输[\s\S]*局[\s\S]*'),
            re.compile('[\s\S]*(赛|vs|VS)[\s\S]*(正在进行)[\s\S]*'),
            re.compile('[\s\S]*(正在进行)[\s\S]*(赛|vs|VS)[\s\S]*'),
            re.compile('[\s\S]*(正在直播)[\s\S]*'),
            re.compile('[\s\S]*半场战报[\s\S]*'),
            re.compile('[\s\S]*半场\d{1,3}[＋+]\d{1,3}[\s\S]*'),
            re.compile('[\s\S]*上半场(战平|领先)((?!最终|最后|下半场|绝|逆转)[\s\S])*'),
            re.compile('[\s\S]*上?半场(比赛)?结束[\s\S]*'),
            re.compile('[\s\S]*领先\d{1,3}分结束上半场[\s\S]*'),
            re.compile('[\s\S]*上半场((?!下半场)[\s\S])*(\d{1,3}分|大比分领先)((?!最终|最后|下半场|绝|逆转)[\s\S])*'),
            re.compile('[\s\S]*暂时[\s\S]*\d{1,3}(-|--|——|:|：|比)\d{1,3}[\s\S]*'),
            re.compile('[\s\S]*暂\d{1,3}(-|--|——|:|：|比)\d{1,3}领先[\s\S]*'),
            re.compile('[\s\S]*\d{1,3}(-|--|——|:|：|比)\d{1,3}((?!榜)[\s\S])*(暂时|先胜|首先拿下)((?!最终|最后|下半场|绝|逆转)[\s\S])*'),
            re.compile('((?!最终|最后|下半场|绝|逆转)[\s\S])*(上?半场)((?!最终|最后|下半场|绝|逆转)[\s\S])*\d{1,3}(-|--|——|:|：|比)\d{1,3}((?!榜)[\s\S])*(领先|平|落后)?((?!最终|最后|下半场|绝|逆转)[\s\S])*'),
            re.compile('[\s\S]*第[一二三四五六七\d](局|轮|场|个)[\s\S]*(\d){1,2}[-比:：](\d){1,2}领先[\s\S]*'),
            re.compile('[\s\S]*(头球|破门|点射|首场|开局|开场|半场)[\s\S]*(\d){1,2}[-比:：](\d){1,2}(领先|加时)[\s\S]*'),
            re.compile('^(\d){1,2}[-比:：](\d){1,2}领先[!！][\s\S]*'),
            re.compile('[\s\S]*(\d){1,2}[-比:：](\d){1,2}领先[!！]?$'),
            re.compile('[\s\S]*(\d){1,2}[-比:：](\d){1,2}[将踢进入]加时[赛]?[\s\S]*'),
            re.compile('[\s\S]*(\d){1,2}[-比:：](\d){1,2}[\s\S]*分钟[\s\S]*连丢[\s\S]*'),
            re.compile('^(\d){1,2}[-比:：](\d){1,2}[\s\S]*(首场)?加时赛[\s\S]*'),
            re.compile('[\s\S]*\d+分钟(.+?)[进球|角球|头球|点射|领先|落后|平|中场|球][\s\S]*'),
        ]

        self.matched_after_pattern = [
            re.compile('[\s\S]*完美收官[\s\S]*'),
            re.compile('[\s\S]*圆满结束[\s\S]*'),
            re.compile('[\s\S]*摘得[\s\S]*冠军[\s\S]*'),
            re.compile('[\s\S]*首战告捷[\s\S]*'),
            re.compile('((?!放弃)[\s\S])*\d{1,3}(-|--|——|:|：|比|vs|VS)\d{1,3}[\s\S]*(大胜|取胜|险胜|客胜|横扫|力克|击败|完成|逼平|战平|不敌)[\s\S]*'),
            re.compile('[\s\S]*赛后采访[\s\S]*'),
            re.compile('[\s\S]*昨天[\s\S]*大战[\s\S]*'),
            re.compile('[\s\S]*客场[\s\S]*(大胜|取胜|险胜|客胜|横扫|力克|击败|完成|逼平|战平|不敌)[\s\S]*'),
            re.compile('[\s\S]*\d{1,3}分[\s\S]*(大胜|取胜|险胜|客胜|横扫|力克|击败|完成|逼平|战平|不敌)[\s\S]*'),
            re.compile('[\s\S]*惜败[\s\S]*'),
            re.compile('[\s\S]*绝杀[\s\S]*'),
            re.compile('[\s\S]*(爆冷|爆大冷|大冷门)[\s\S]*'),
            re.compile('[\s\S]*胜[\s\S]*(取得|取|得)[\s\S]*开门红[\s\S]*'),
            re.compile('[\s\S]*喜迎[\s\S]*(胜|开门红)[\s\S]*'),
            re.compile('((?!曾|退役|谁会|谁能|会|能)[\s\S])*(斩获|夺得)[\s\S]*(金|银|铜|冠军|首冠|首胜|首场胜利|佳绩|成绩|棋王)((?!秘密|秘诀|？|\?)[\s\S])*'),
            re.compile('[\s\S]*斩获[\s\S]*\d{1,3}\+\d{1,3}[\s\S]*'),
            re.compile('[\s\S]*斩获[\s\S]*第((\d{1,3})|[一二三四五六七八九十])冠[\s\S]*'),
            re.compile('[\s\S]*完成[\s\S]*((\d{1,3})|[一二三四五六七八九十])连冠[\s\S]*'),
            re.compile('[\s\S]*赛[\s\S]*落幕[\s\S]*'),
            re.compile('[\s\S]*((\d{1,3})|[一二三四五六七八九十])连胜[\s\S]*夺冠[\s\S]*'),
            re.compile('[\s\S]*遭[\s\S]*\d{1,3}(-|--|——|:|：|比|vs|VS)\d{1,3}[\s\S]*逆转[\s\S]*'),
            re.compile('[\s\S]*\d{1,3}\+\d{1,3}(\+\d[1,3])?[!！][\s\S]*'),
            re.compile('[\s\S]*比赛实录[\s]*$'),
            re.compile('[\s\S]*\d{1,3}( - |-|--|——|:|：|比)\d{1,3}[\s\S]*'),
        ]

        football_team, self.team_normalize = [], {}
        for i in open(football_team_file,"r"):
            tnames = i.strip().split()
            if len(tnames) < 1: continue
            football_team.extend(tnames)
            for tn in tnames:
                self.team_normalize[tn] = tnames[0]
            #self.team_normalize = {tn : tnames[0] for tn in tnames}
        self.media_white_list = set([u"直播吧", u"新浪体育", u"肆客足球APP", u"球圆字方", u"小贤爱足球", u"天外居", u"时刻足球原创", u"搜达足球", u"足球算个球", u"梦幻绿茵场", u"二言三拍", u"PP体育", u"咪咕体育"])
        self.football_team_pattern = re.compile("|".join(football_team))
        self.football_score = re.compile("(\d{1,3})( - |-|--|——|:|：|比)(\d{1,3})")
        self.socre_normalize = {"-":"比",  " - ":"比", "--":"比", "——":"比", ":":"比", "：":"比", "比":"比"}

    def detect(self,text):
        #if isinstance(text, unicode):   text = text.encode('utf-8')
        text = text.replace(" ", "")
        if not text:    return 0

        def after_sport_detect(text):
            for ptn in self.matched_after_pattern:
                m = ptn.match(text)
                if m and m.group() == text:
                    return 1
            return 0

        def during_sport_detect(text):
            for ptn in self.matched_during_pattern:
                m = ptn.match(text)
                if m and m.group() == text:
                    return 1
            return 0
    
        return after_sport_detect(text) | during_sport_detect(text)
    
    def extract_info(self,text):
        #if isinstance(text, unicode):   text = text.encode('utf-8')
        team = re.findall(self.football_team_pattern, text)
        team = [self.team_normalize[tm] for tm in team]
        score = re.findall(self.football_score, text)
        nor_score = []
        try:
            for s in score:
                if len(s) != 3:    continue
                if int(s[0]) > 10 or int(s[2]) > 10:    continue
                if s[0] < s[2]: 
                    s1 = s[0]
                    s2 = s[2]
                else:
                    s1 = s[2]
                    s2 = s[0]
                nor_score.append("".join([s1, self.socre_normalize[s[1]], s2]))
        except Exception as e:
            print(e)
        ret = {}
        if team:    ret['team'] = list(set(team))
        if nor_score:   ret['score'] = nor_score
        return ret

TRASH_LIST = ['黑猫投诉',
        '广场舞',
        '龙虎榜',
        '爆笑段子',
        '爆笑德云社',
        '德云斗笑社',
        '德云社',
        '生意社：',
        '投资者提问',
        '厨师长教你',
        '大宗交易',
        '新手养花',
        '喵星人',
        '汪星人',
        '小姐姐',
        '主人',
        '哈哈哈',
        'DJ',
        '小猫咪',
        '小猴子',
        '好歌分享',
        '小奶猫',
        '狸花猫',
        '一首《',
        '[生肖][鼠|牛|虎|兔|龙|蛇|马|羊|猴|鸡|狗|猪]',
        '[属](相)?[鼠|牛|虎|兔|龙|蛇|马|羊|猴|鸡|狗|猪](人)?',
        ]
TRASH_LIST_W = [
	'北向资金(.+?)[流入|流出|买入|卖出]',
        '^请保持关注|请保持关注$',
        '小哥哥|小姐姐|你大爷',
        '[个大12345]星座',
        '贫穷限制了我的想象'
]

COVID_LIST = ['[新增](.+?)(\d)+[例]',
              '新增(.+?)(\d)+[例万]',
              '[累计](.+?)[例|万]',
              '[死亡](.+?)[例]'
              '[治愈](.+?)[例|万]'
              '[出院](.+?)[例|万]',
              '[零](.+?)[新增]',
              '[无](.+?)[新增]',
              '[确诊](.+?)[新增]',
              '[确诊](.+?)[病例]',
              '[确诊](.+?)[密接]',
              '[疫情](.+?)[防控]',
              '[轨迹](.+?)[密接]',
              '[高风险](.+?)[密接]',
              '(\d)+[新增]',
              '感染(.+?)[例]',
             ]

COVID_NUM = ['新增(.+?)(\d)+[例|病例]',
              '新增(\d)+[例|病例|人]',
              '新增[一|二|三|四|五|六|七|八|九|十]+[例|病例]',
              '新增病例',
              '[感染|阳性](.+?)+(\d)',
              '新增(.+?)(\d)+(\d)',
              '新增(.+?)(\d)',
              '发现(\d)例(.+?)[感染|阳性]',
              '新增(.+?)确诊',
              '新增(.+?)病例(.+?)(\d)',
              '新增本土(.+?)(\d)',
              '新增(.+?)病例',
              '累计(.+?)[例|万]',
              '[治愈|死亡|出院|感染](.+?)[例|万]'
              '[零|0|无]新增',
              '确诊(.+?)新增',
              '确诊(.+?)例',
              '确诊(.+?)密接',
              '\d例新增',
              '((.+?)例)(确诊)|(确诊)((.+?例))|确诊(.+?)(\d)|(\d)确诊|新增(.+?)(\d)|(\d)新增'
             ]
#人工维护的电视剧名字
#VIDEO_DSJ_MANUAL=[
#        '大秦赋']

#人工维护的综艺的名字
#VIDEO_ZY_MANUAL=['浪姐',
#        '乘风破浪的姐姐',
#        '追光吧哥哥']

#人工维护的纪录片的名字
#VIDEO_JLP_MANUAL = ['全球未解之谜',]

#人工维护的电影的名字
#VIDEO_DY_MANUAL = ['我和我的家乡',]

#VIDEO_DSJ = VIDEO_ENTITIES['VIDEO_DSJ_AUTO'] + VIDEO_DSJ_MANUAL
#VIDEO_ZY  = VIDEO_ENTITIES['VIDEO_ZY_AUTO'] + VIDEO_ZY_MANUAL
#VIDEO_JLP = VIDEO_ENTITIES['VIDEO_JLP_AUTO'] + VIDEO_JLP_MANUAL
#VIDEO_DY  = VIDEO_ENTITIES['VIDEO_DY_AUTO'] + VIDEO_DY_MANUAL

#VIDEO_DSJ_RE = re.compile('|'.join(item for item in VIDEO_DSJ).decode('utf-8'))
#VIDEO_ZY_RE  = re.compile('|'.join(item for item in VIDEO_ZY).decode('utf-8'))
#VIDEO_JLP_RE = re.compile('|'.join(item for item in VIDEO_JLP).decode('utf-8'))
#VIDEO_DY_RE  = re.compile('|'.join(item for item in VIDEO_DY).decode('utf-8') )
TRASH_RE = re.compile('|'.join(item for item in TRASH_LIST))
TRASH_W_RE = re.compile('|'.join(item for item in TRASH_LIST_W))
COVID_RE = re.compile('|'.join(item for item in COVID_LIST))
COVID_NUM_RE = re.compile('|'.join(item for item in COVID_NUM))
AREA_RE = re.compile(r'省|市|区|县|镇')
#del VIDEO_ENTITIES,VIDEO_DSJ,VIDEO_ZY,VIDEO_DY

def regulation(text):
    if not text:return 0
    #if not isinstance(text, unicode):text=text.decode('utf-8')
    if TRASH_RE.search(text[:7]):return 1
    if TRASH_W_RE.search(text):return 1
    return 0

pweather = re.compile('台风|暴雨|暴风|有雨|小雨|大雨|大风天气|气象|天气|龙卷风|沙尘暴|泥石流|山地滑坡|地震|暴雪|冰雹|大雪|小雪|雾霾|大雾|阴天|晴转多 云|多云|阴转晴|晴转阴|高温预警|桑拿天|天气预报|雷电[\s\S]*预警|暴雨[\s\S]*预警|立春|雨水|惊蛰|春分|清明|谷雨|立夏|小满|芒种|夏至|小暑|大暑|立 秋|处暑|白露|秋分|寒露|霜降|立冬|小雪|大雪|冬至|小寒|大寒')

olympic_winter_sports = re.compile('短道速滑|空中技巧|滑冰|溜冰|滑雪|速滑|花滑|单板滑雪|冰壶男子|冰壶女子|钢架雪车男子|北欧两项男子|高山滑雪男子|冰壶|自由式滑雪男子|越野滑雪女子|跳台滑雪男子|花滑团体女单|速度滑冰女子1500米|速度滑冰男子5000米|短道速滑男子1000米|钢架雪车|自由式滑雪女子|冬季两项混合接力|冰壶混双|短道速滑混合接力|花滑团体冰舞韵律舞|速度滑冰男子|自由式滑雪|单板滑雪男子平行大回转|雪橇女子|速度滑冰|短道速滑女子500米|花滑团体|冬季两项女子|冰球女子|冬季两项男子|短道速滑女子|雪橇男子|冬季两项女子15公里|雪橇双人|速度滑冰女子3000米|钢架雪车女子|花样滑冰|单板滑雪女子|雪橇团体|速度滑冰女子|越野滑雪男子|单板滑雪女子平行大回转|花滑团体双人滑|高山滑雪女子|短道速滑|短道速滑男子|花滑团体男单|跳台滑雪女子|单板滑雪男子|花样滑冰男子|跳台滑雪混合团体|冰球男子') 
olympic_winter_athlete = re.compile("伍斯特|里尔达姆|费尔比耶|安托瓦内特•德容|宮田将吾|大泽千穗|纽斯|樋口新叶|坂本花织|志贺葵|木原龙一|博格斯玛|三浦璃来|吉永一贵|川岛有纪子|藤本萌子|菊池耕太|施佩尔坎普|久保英惠|小松原美里|三浦芽依|獅子内美帆|神长汐音|斯考滕|范德波尔|因特霍夫|米歇尔•德容|键山优真|床秦留可|大滝知香|格罗恩伍德|克罗尔|菊池悠希|志贺红音|博斯克尔|藤本那菜|宇野昌磨|克拉默|小池克典|铃木世奈|科克|高凉风|菊池純礼|増原海夕|河边爱菜|小松原尊|细田山茜|阿奇特里克特|罗斯特|米山知奈|浮田留衣|床亚矢可|奥特尔斯佩尔|小池诗织|羽生|黄大宪|王濛|张添翼|普鲁申科|金妍儿|浅田真央|佩希施泰因|威廉姆斯|劳琳·威廉姆斯|劳琳|安娜·谢尔巴科娃|谢尔巴科娃|安娜|怀特|肖恩|肖恩·怀特|崔敏静|康纳·麦克戴维|李琰|维克多·安|赵宏博|比约达伦|安贤洙|麦克戴维|康纳|羽生结弦|武大靖|任子威|范可新|张雨婷|孙龙|张楚桐|高亭宇|宁忠岩|廉子文|田芮宁|隋文静|韩聪|彭程|金杨|金博洋|朱艺|王诗玥|柳鑫宇|苏翊鸣|刘佳宇|蔡雪桐|徐梦桃|齐广璞|王心迪|贾宗洋|邵琪|许诺|孔凡钰|谷爱凌|杨硕瑞|闫文港|耿文强|陈文浩|龙承凤|林回央|赵丹|黎禹汐|巴德鑫|臧嘉亮|姜馨迪|王芮|麻敬宜|杨莹|凌智") 
olympic_winter = re.compile("冬奥会|冠军|首金|开幕式|闭幕式|冰墩墩|雪融融|冬奥|金牌|银牌|奖牌|奥运|志愿者")

#russia = re.compile("俄罗斯|普京|乌克兰|俄乌|乌东|顿涅茨克|卢甘斯克|泽连斯基|切尔诺贝利")
russia = re.compile("外交官|王毅|拜登|波兰|以色列|土耳其|默克尔|马克龙|外长|发言人|东欧|欧洲|亚洲|战略|战争|欧盟|制裁|俄罗斯|普京|乌克兰|俄乌|乌东|北约|车臣|顿涅茨克|卢甘斯克|泽连斯基|切尔诺贝利|乌媒|俄媒|莫斯科|俄军|乌军|基辅|切尔卡瑟|切尔尼戈夫|切尔诺夫策|第聂伯罗彼得罗夫斯克|弗兰科夫斯克|哈尔科夫|赫尔松|赫梅利尼茨基|基洛沃格勒|基辅|利沃夫|尼古拉耶夫|敖德萨|波尔塔瓦|罗夫诺|苏梅|捷尔诺波尔|文尼察|沃伦|外喀尔巴阡|扎波罗热|日托米尔")
p_russia_day = re.compile('第[一二三四五六七八九十百千万\d+]+天')

mu5735 = re.compile("民航局|东航|东方航空|坠机|飞机失事|空难|波音|737-800|客机|藤县|133人|132人|MU5735|救援|mu5735")

long_news_spam_p = re.compile("高仿|包包|今日推荐|联系方式|更新中|已更新|今日行情|实时行情|「今日公告」|今日h发现|剧本杀|网点热线|今日热点|今日发现|客服热线|客服电话")

xiangsheng = re.compile("相声|德云社|郭德纲|于谦|岳云鹏")

def is_xiangsheng(text):
    if not text:	return False
    if xiangsheng.search(text):
        return True
    return False

def long_news_spam(text):
    if not text:    return False
    if long_news_spam_p.search(text): return True
    return False
	
def is_mu5735(text):
    if not text:    return False
    if mu5735.search(text): return True
    return False

def russia_event_day(text):
    '''识别第几天'''
    if not text:	return []
    days = re.findall(p_russia_day, text)
    rets = []
    for d in days:
        try:
            _tmp = "第{}天".format(cn2an.cn2an(d[1:-1]))
        except:
            _tmp = d
        rets.append(_tmp)
    return rets

text = "俄乌战争进入第八天，最荒唐一幕发生了！第10天啥的积分第十一天第八十天第三千八百六十二天"
print(russia_event_day(text))

def is_russia(text):
    if not text:    return False
    if russia.search(text): return True
    return False

def weather_regulation(text):
    if not text:return 0
    if pweather.search(text):return 1
    return 0

def covid_regulation(text):
    if not text:return 0
    if COVID_RE.search(text):return 1
    return 0

def covid_num_regulation(text):
    if not text:return 0
    if COVID_NUM_RE.search(text):return 1
    return 0

def olympic_regulation(text):
    if not text:	return [], []
    sports = re.findall(olympic_winter_sports, text)
    athlete = re.findall(olympic_winter_athlete, text)
    return sports, athlete

def is_olympic(text):
    if not text:	return False
    if olympic_winter.search(text):	return True
    if olympic_winter_sports.search(text):	return True
    if olympic_winter_athlete.search(text):	return True
    return False


if __name__ == '__main__':
    s = u'现场直击丨北京疫情防控新闻发布会'
    s = u'北京新增一例境外输入无症状感染者'
    s = u'北京新增1例本地确诊病例，系京外关联无症状感染者转确诊'
    s = u'疫情发布丨北京8月10日新增1例京外关联本地新冠肺炎无症状感染者转确诊病例  新增7例境外输入无症状感染者'
    s = u'美国新增确诊病例89万'
    s = u'有绿码、接种过新冠疫苗，为何还是不让进病房探视？'
    s = u'北京累计接种新冠病毒疫苗2221.21万人'
    s = u'广东：超九成人全程接种新冠疫苗'
    s = u'巴基斯坦首现本土感染奥密克戎毒株病例'
    s = u'突尼斯出现第一例奥密克戎毒株感染病例，为刚果男性'
    s = u'拜登宣布：将从明年1月起向全美分发5亿份居家自助核酸检测试剂'
    s = u'本土新增182+3！西安新增175例确诊，解放军军医连夜支援！'
    print(covid_regulation(s))
    s = u'杭州新增23ljsalfjfjalsj 中国 确诊，系肿瘤科住院部护士'
    s = '山东昨日新增本土51＋380例'
    s = '山东昨日新增本土“51+380”'
    print(covid_num_regulation(s))
    print(covid_regulation(s))
    s = '郭德纲求画，于谦爸爸画了个黑扇面：你找人写金字去吧'
    print(is_xiangsheng(s))
    exit()
    s = u'这几个星座年底开始，到了明年年初隆运当头，横财不断，富贵之命'
    s = u'四月爱情运势最好的4星座，桃花旺旺旺，旧爱复合，会有你么？'
    #s = u'宇通客车12月8日遭12个北向资金席位净流入，高盛(亞洲)證券有限公司大幅度净流入3344.74万元'
    print(regulation(s))
    s = "短道速滑，武大靖"
    s = "中国为何不是冬奥会的强国？广播的时候，为何会是先用法语播报？"
    s = "单板滑雪女子U型场地技巧资格赛，中国队三人晋级！"
    s = "苏翊鸣教练恳请终止批评裁判：不在意结果 打分工作真的很难"
    print(olympic_regulation(s))
    print(is_olympic(s))
    s = "切 尔诺夫策 乌 媒：基 辅遭3枚导弹袭击 第聂伯罗彼得罗夫斯克"
    print(is_russia(s))
    text = "俄乌战争进入第八天，最荒唐一幕发生了！第10天啥的积分第十一天第八十天第三千八百六十二天"
    print(russia_event_day(text))
    exit()
    s = u'海淀今晚黄色暴风预警'
    s = u'巴拿马以南海域发生6.8级地震，震源深度10千米'
    s = u'12月07日09时湖北天气预报'
    print(weather_regulation(s))
    sDetectClient = SportsDetect(football_team_file="data/football_team.txt")
    s = u'加媒：拜仁自信能重演8比2   感觉比巴萨强多了'
    s = u'3-0，91分钟破门！巴萨终于赢了，新10号轰赛季首球，飙升西甲第5'
    s = u'巴萨3-0！梅西接班人疯狂怒吼！德容登贝莱佩德里起立为他鼓掌'
    ret = sDetectClient.detect(s)
    import json

    print(json.dumps(ret, ensure_ascii=False))
    ret = sDetectClient.extract_info(s)
    print(json.dumps(ret, ensure_ascii=False))
